home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / dev / mui / bcc_src.lha / Parser / Bug / MainWin.c < prev    next >
C/C++ Source or Header  |  1998-01-16  |  17KB  |  615 lines

  1. /* 
  2.     This file was generated by BCC v2.0
  3.     MUI mode
  4. */
  5.  
  6. /* .bcc_code for MUI mode */
  7.  
  8. /* Defines that help adjusting to any compiler */
  9. #ifdef _DCC
  10. #define REG(x) __ ## x
  11. #define ASM
  12. #define SAVEDS __geta4
  13. #else
  14. #define REG(x) register __ ## x
  15. #ifdef _STORM
  16. #define ASM
  17. #define SAVEDS __saveds
  18. #else
  19. #if defined __MAXON__ || defined __GNUC__
  20. #define ASM
  21. #define SAVEDS
  22. #else
  23. #define ASM    __asm
  24. #define SAVEDS __saveds
  25. #endif
  26. #endif
  27. #endif
  28.  
  29. #ifndef PROTO_MUIMASTER_H
  30. #include <proto/muimaster.h>
  31. #endif
  32.  
  33. #ifndef PROTO_INTUITION_H
  34. #include <proto/intuition.h>
  35. #endif
  36.  
  37. #ifndef PROTO_UTILITY_H
  38. #include <proto/utility.h>
  39. #endif
  40.  
  41. #ifndef STRING_H
  42. #include <string.h>
  43. #endif
  44.  
  45. #ifndef LIBRARIES_BCC_H
  46. #include <libraries/bcc.h>
  47. #endif
  48.  
  49. #ifndef  CLIB_ALIB_PROTOS_H
  50. #include <clib/alib_protos.h>
  51. #endif
  52.  
  53. /* Only for custom methods */
  54. #define CallSuper() DoSuperMethodA(cl, obj, msg)
  55. #define GetData() INST_DATA(cl, obj)
  56.  
  57.  
  58. #include <math.h>
  59. #include <proto/exec.h>
  60. #include <proto/intuition.h>
  61. #include <proto/dos.h>
  62. #include <proto/asl.h>
  63. #include <dos/dos.h>
  64. #include <libraries/asl.h>
  65. #include <intuition/intuition.h>
  66.  
  67. #include "global.h"
  68. #include "model.h"
  69. #include "load.h"
  70. #include "App.h"
  71. #include "Mainwin.h"
  72. #include "View.h"
  73.  
  74. #define fract(n)    (n - floor(n))
  75.  
  76. static __saveds __asm void IntuiMsgFunc(register __a1 struct IntuiMessage=
  77.  *,register __a2 struct FileRequester *);
  78. static char *getfilename(Object *,char *,char *,char *,char);
  79.  
  80.  static unsigned long mMainwinOM_NEW( struct IClass *cl, Object *obj, struct opSet* msg )
  81. {
  82.  unsigned long _ret;
  83.  MainwinData *data, _tdata;
  84.  data = &_tdata;
  85.  memset( data, 0, sizeof( MainwinData ) );
  86.  obj = (Object*)BCC_DoSuperNew( cl, obj,
  87.  
  88.     MUIA_Window_Title,    "Geotto",
  89.     MUIA_Window_ID,        MAKE_ID('M','A','I','N'),
  90.     MUIA_Window_NeedsMouseObject, TRUE,
  91. /*
  92.     MUIA_Window_CloseGadget, FALSE,
  93.     MUIA_Window_DepthGadget, FALSE,
  94.     MUIA_Window_DragBar, FALSE,
  95.     MUIA_Window_Backdrop, TRUE,
  96.     MUIA_Window_Borderless, TRUE,
  97. */
  98.     WindowContents, VGroup,
  99.         Child, HGroup,
  100.             Child, VGroup,
  101.                 MUIA_Weight, 0,
  102.                 Child, SimpleButton("About"),
  103.                 Child, (data->newobj) =3D KeyButton("New",'n'),
  104.                 Child, TextObject,
  105.                     MUIA_Text_Contents, "Fetch",
  106.                     End,
  107.                 Child, (data->loadobj) =3D KeyButton("Load",'l'),
  108.                 Child, KeyButton("Save",'s'),
  109.                 Child, KeyButton("Save As",'s'),
  110.                 Child, TextObject,
  111.                     MUIA_Text_Contents, "Zoom",
  112.                     End,
  113.                 Child, (data->zoomin) =3D KeyButton("In",'+'),
  114.                 Child, (data->zoomout) =3D KeyButton("Out",'-'),
  115.                 Child, HVSpace,
  116.                 Child, VGroup,
  117.                     TextFrame,
  118.                     MUIA_Background, MUII_TextBack,
  119.                     Child, (data->xcoordtxt) =3D TextObject, End,
  120.                     Child, (data->ycoordtxt) =3D TextObject, End,
  121.                     Child, (data->zcoordtxt) =3D TextObject, End,
  122.                     End,
  123.                 End,
  124.             Child, (data->viewgr) =3D ColGroup(2),
  125.                 MUIA_Group_HorizSpacing, 1,
  126.                 MUIA_Group_VertSpacing, 1,
  127.                 Child, (data->view1) =3D ViewObject,
  128.                     VirtualFrame,
  129.                     MUIA_View_Mode, MUIV_View_Mode_Top,
  130.                     MUIA_View_X, f2l(0.0),
  131.                     MUIA_View_Y, f2l(0.0),
  132.                     MUIA_View_Z, f2l(0.0),
  133.                     MUIA_View_Zoom, f2l(0.1),
  134.                     MUIA_View_GridSize, f2l(1.0),
  135.                     End,
  136.                 Child, (data->view2) =3D ViewObject,
  137.                     VirtualFrame,
  138.                     MUIA_View_Mode, MUIV_View_Mode_Persp,
  139.                     MUIA_View_X, f2l(0.0),
  140.                     MUIA_View_Y, f2l(0.0),
  141.                     MUIA_View_Z, f2l(0.0),
  142.                     MUIA_View_Zoom, f2l(0.1),
  143.                     MUIA_View_GridSize, f2l(1.0),
  144.                     End,
  145.                 Child, (data->view3) =3D ViewObject,
  146.                     VirtualFrame,
  147.                     MUIA_View_Mode, MUIV_View_Mode_Face,
  148.                     MUIA_View_X, f2l(0.0),
  149.                     MUIA_View_Y, f2l(0.0),
  150.                     MUIA_View_Z, f2l(0.0),
  151.                     MUIA_View_Zoom, f2l(0.1),
  152.                     MUIA_View_GridSize, f2l(1.0),
  153.                     End,
  154.                 Child, (data->view4) =3D ViewObject,
  155.                     VirtualFrame,
  156.                     MUIA_View_Mode, MUIV_View_Mode_Left,
  157.                     MUIA_View_X, f2l(0.0),
  158.                     MUIA_View_Y, f2l(0.0),
  159.                     MUIA_View_Z, f2l(0.0),
  160.                     MUIA_View_Zoom, f2l(0.1),
  161.                     MUIA_View_GridSize, f2l(1.0),
  162.                     End,
  163.                 End,
  164.             End,
  165.         Child, HGroup,
  166.             Child, (data->gridsizetxt) =3D TextObject,
  167.                 TextFrame,
  168.                 MUIA_Background, MUII_TextBack,
  169.                 MUIA_Text_Contents, "Grid:",
  170.                 End,
  171.             Child, (data->poks) =3D SimpleButton("MUI Settings..."),
  172.             End,
  173.         End
  174. ,
  175.  TAG_MORE, (unsigned long)msg->ops_AttrList,
  176.  TAG_DONE );
  177.  _ret = (unsigned long)obj;
  178.  if( !obj ) return 0;
  179.  data = INST_DATA( cl, obj );
  180.  memcpy( data, &_tdata, sizeof( MainwinData ) );
  181. {
  182.  /* UC Beg */
  183.  
  184.     BCC_Set( obj, MUIA_Mainwin_Zoom, 3D 0.1 );
  185.  
  186.     DoMethod( (data->poks), MUIM_Notify, MUIA_Pressed,FALSE,MUIV_Notify_Application,2,MUIM_Applicat=
  187. ion_OpenConfigWindow,0);
  188.  
  189.     DoMethod( (data->newobj), MUIM_Notify, MUIA_Pressed,FALSE,obj,1,MUIM_Mainwin_New);
  190.     DoMethod( (data->loadobj), MUIM_Notify, MUIA_Pressed,FALSE,obj,1,MUIM_Mainwin_Load);
  191.  
  192.     DoMethod( (data->zoomin), MUIM_Notify, MUIA_Pressed,FALSE,obj,1,MUIM_Mainwin_ZoomIn);
  193.     DoMethod( (data->zoomout), MUIM_Notify, MUIA_Pressed,FALSE,obj,1,MUIM_Mainwin_ZoomOut);
  194.  
  195.     (data->ehnode).ehn_Priority =3D 0;
  196.     (data->ehnode).ehn_Flags =3D 0;
  197.     (data->ehnode).ehn_Object =3D obj;
  198.     (data->ehnode).ehn_Class =3D NULL;
  199.     (data->ehnode).ehn_Events =3D IDCMP_RAWKEY | IDCMP_MOUSEMOVE;
  200.  
  201.     DoMethod( obj, MUIM_Window_AddEventHandler, &(data->ehnode));
  202.  
  203.     (data->objreq) =3D MUI_AllocAslRequestTags(ASL_FileRequest,
  204.         ASLFR_InitialDrawer,    "3D:",
  205.         ASLFR_InitialPattern,    "#?.(lwo|img)",
  206.         ASLFR_DoPatterns,        TRUE,
  207.         ASLFR_RejectIcons,        TRUE,
  208.         TAG_DONE);
  209.  
  210.     (data->Model) =3D AllocModel();
  211.  
  212. /*    {
  213.     vertex_t *v[8];
  214.     polygon_t *p;
  215.  
  216.     v[0] =3D AddVertex(Model);    v[0]->x =3D -1.0;    v[0]->y =3D 1.0;        v[0]->z =3D=
  217.  1.0;
  218.     v[1] =3D AddVertex(Model);    v[1]->x =3D 1.0;    v[1]->y =3D 1.0;        v[1]->z =3D=
  219.  1.0;
  220.     v[2] =3D AddVertex(Model);    v[2]->x =3D -1.0;    v[2]->y =3D -1.0;        v[2]->z =
  221. =3D 1.0;
  222.     v[3] =3D AddVertex(Model);    v[3]->x =3D 1.0;    v[3]->y =3D -1.0;        v[3]->z =3D=
  223.  1.0;
  224.     v[4] =3D AddVertex(Model);    v[4]->x =3D -1.0;    v[4]->y =3D 1.0;        v[4]->z =3D=
  225.  -1.0;
  226.     v[5] =3D AddVertex(Model);    v[5]->x =3D 1.0;    v[5]->y =3D 1.0;        v[5]->z =3D=
  227.  -1.0;
  228.     v[6] =3D AddVertex(Model);    v[6]->x =3D -1.0;    v[6]->y =3D -1.0;        v[6]->z =
  229. =3D -1.0;
  230.     v[7] =3D AddVertex(Model);    v[7]->x =3D 1.0;    v[7]->y =3D -1.0;        v[7]->z =3D=
  231.  -1.0;
  232.  
  233.     p =3D AddPolygon(Model); AddPolyvert(p,v[0]); AddPolyvert(p,v[1]); AddPo=
  234. lyvert(p,v[3]); AddPolyvert(p,v[2]);
  235.     p =3D AddPolygon(Model); AddPolyvert(p,v[4]); AddPolyvert(p,v[5]); AddPo=
  236. lyvert(p,v[7]); AddPolyvert(p,v[6]);
  237.     p =3D AddPolygon(Model); AddPolyvert(p,v[0]); AddPolyvert(p,v[1]); AddPo=
  238. lyvert(p,v[5]); AddPolyvert(p,v[4]);
  239.     p =3D AddPolygon(Model); AddPolyvert(p,v[2]); AddPolyvert(p,v[3]); AddPo=
  240. lyvert(p,v[7]); AddPolyvert(p,v[6]);
  241.     }
  242. */
  243.     //LoadModel("CC:Lambda/orig/freighter.lwo",Model);
  244.     //LoadModel("CC:Lambda/orig/mfighter2.img",Model);
  245.  
  246.     BCC_Set( (data->viewgr), MUIA_View_Model, 3D (data->Model) );
  247.  
  248. }
  249.  /* UC End */
  250. OM_NEW_exit:
  251. return _ret;
  252. }
  253.  
  254.  static unsigned long mMainwinOM_DISPOSE( struct IClass *cl, Object *obj, Msg msg )
  255. {
  256.  unsigned long _ret = 1;
  257.  MainwinData *data = INST_DATA( cl, obj );
  258. {
  259.  /* UC Beg */
  260.  
  261.     DoMethod( obj, MUIM_Window_RemEventHandler, &(data->ehnode));
  262.     MUI_FreeAslRequest((data->objreq));
  263.  
  264.     FreeModel((data->Model));
  265.  
  266. }
  267.  /* UC End */
  268. OM_DISPOSE_exit:
  269.  _ret = DoSuperMethodA( cl, obj, (Msg)msg );
  270. return _ret;
  271. }
  272.  
  273.  static unsigned long mMainwinMUIM_HandleEvent( struct IClass *cl, Object *obj, struct MUIP_HandleEvent* msg )
  274. {
  275.  unsigned long _ret = 1;
  276.  MainwinData *data = INST_DATA( cl, obj );
  277. {
  278.  /* UC Beg */
  279.  
  280.     Object *mouseobj =3D (Object *)BCC_XGet( obj, MUIA_Window_MouseObject );
  281.  
  282.     if (msg->imsg)
  283.     {
  284.         if (mouseobj =3D=3D (data->view1))
  285.         {
  286.             switch(msg->imsg->Class)
  287.             {
  288.                 case IDCMP_RAWKEY:
  289.                     switch(msg->imsg->Code)
  290.                     {
  291.                         case 76:
  292.                             DoMethod( (data->viewgr), MUIM_View_ScrollZPos);
  293.                             { _ret =  MUI_EventHandlerRC_Eat; goto MUIM_HandleEvent_exit; } 
  294.                             break;
  295.                         case 77:
  296.                             DoMethod( (data->viewgr), MUIM_View_ScrollZNeg);
  297.                             { _ret =  MUI_EventHandlerRC_Eat; goto MUIM_HandleEvent_exit; } 
  298.                             break;
  299.                         case 79:
  300.                             DoMethod( (data->viewgr), MUIM_View_ScrollXPos);
  301.                             { _ret =  MUI_EventHandlerRC_Eat; goto MUIM_HandleEvent_exit; } 
  302.                             break;
  303.                         case 78:
  304.                             DoMethod( (data->viewgr), MUIM_View_ScrollXNeg);
  305.                             { _ret =  MUI_EventHandlerRC_Eat; goto MUIM_HandleEvent_exit; } 
  306.                             break;
  307.                     }
  308.                     break;
  309.                 case IDCMP_MOUSEMOVE:
  310.                     BCC_Set( (data->xcoordtxt), MUIA_Text_Contents, 3D "X 0.0 m" );
  311.                     BCC_Set( (data->ycoordtxt), MUIA_Text_Contents, 3D NULL );
  312.                     BCC_Set( (data->zcoordtxt), MUIA_Text_Contents, 3D "Z 0.0 m" );
  313.                     break;
  314.             }
  315.         }
  316.         else if (mouseobj =3D=3D (data->view3))
  317.         {
  318.             switch(msg->imsg->Class)
  319.             {
  320.                 case IDCMP_RAWKEY:
  321.                     switch(msg->imsg->Code)
  322.                     {
  323.                         case 76:
  324.                             DoMethod( (data->viewgr), MUIM_View_ScrollYPos);
  325.                             { _ret =  MUI_EventHandlerRC_Eat; goto MUIM_HandleEvent_exit; } 
  326.                             break;
  327.                         case 77:
  328.                             DoMethod( (data->viewgr), MUIM_View_ScrollYNeg);
  329.                             { _ret =  MUI_EventHandlerRC_Eat; goto MUIM_HandleEvent_exit; } 
  330.                             break;
  331.                         case 79:
  332.                             DoMethod( (data->viewgr), MUIM_View_ScrollXPos);
  333.                             { _ret =  MUI_EventHandlerRC_Eat; goto MUIM_HandleEvent_exit; } 
  334.                             break;
  335.                         case 78:
  336.                             DoMethod( (data->viewgr), MUIM_View_ScrollXNeg);
  337.                             { _ret =  MUI_EventHandlerRC_Eat; goto MUIM_HandleEvent_exit; } 
  338.                             break;
  339.                     }
  340.                     break;
  341.                 case IDCMP_MOUSEMOVE:
  342.                     BCC_Set( (data->xcoordtxt), MUIA_Text_Contents, 3D "X 0.0 m" );
  343.                     BCC_Set( (data->ycoordtxt), MUIA_Text_Contents, 3D "Y 0.0 m" );
  344.                     BCC_Set( (data->zcoordtxt), MUIA_Text_Contents, 3D NULL );
  345.                     break;
  346.             }
  347.         }
  348.         else if (mouseobj =3D=3D (data->view4))
  349.         {
  350.             switch(msg->imsg->Class)
  351.             {
  352.                 case IDCMP_RAWKEY:
  353.                     switch(msg->imsg->Code)
  354.                     {
  355.                         case 76:
  356.                             DoMethod( (data->viewgr), MUIM_View_ScrollYPos);
  357.                             { _ret =  MUI_EventHandlerRC_Eat; goto MUIM_HandleEvent_exit; } 
  358.                             break;
  359.                         case 77:
  360.                             DoMethod( (data->viewgr), MUIM_View_ScrollYNeg);
  361.                             { _ret =  MUI_EventHandlerRC_Eat; goto MUIM_HandleEvent_exit; } 
  362.                             break;
  363.                         case 79:
  364.                             DoMethod( (data->viewgr), MUIM_View_ScrollZNeg);
  365.                             { _ret =  MUI_EventHandlerRC_Eat; goto MUIM_HandleEvent_exit; } 
  366.                             break;
  367.                         case 78:
  368.                             DoMethod( (data->viewgr), MUIM_View_ScrollZPos);
  369.                             { _ret =  MUI_EventHandlerRC_Eat; goto MUIM_HandleEvent_exit; } 
  370.                             break;
  371.                     }
  372.                     break;
  373.                 case IDCMP_MOUSEMOVE:
  374.                     BCC_Set( (data->xcoordtxt), MUIA_Text_Contents, 3D NULL );
  375.                     BCC_Set( (data->ycoordtxt), MUIA_Text_Contents, 3D "Y 0.0 m" );
  376.                     BCC_Set( (data->zcoordtxt), MUIA_Text_Contents, 3D "Z 0.0 m" );
  377.                     break;
  378.             }
  379.         }
  380.         else
  381.         {
  382.             if (msg->imsg->Class =3D=3D IDCMP_MOUSEMOVE)
  383.             {
  384.                 BCC_Set( (data->xcoordtxt), MUIA_Text_Contents, 3D NULL );
  385.                 BCC_Set( (data->ycoordtxt), MUIA_Text_Contents, 3D NULL );
  386.                 BCC_Set( (data->zcoordtxt), MUIA_Text_Contents, 3D NULL );
  387.             }
  388.         }
  389.     }
  390.  
  391.     { _ret =  0; goto MUIM_HandleEvent_exit; } 
  392.  
  393. }
  394.  /* UC End */
  395. MUIM_HandleEvent_exit:
  396. return _ret;
  397. }
  398.  
  399. static unsigned long mMainwinNew( struct IClass *cl, Object *obj, Msg msg )
  400. {
  401.  unsigned long _ret = 1;
  402.  MainwinData *data = INST_DATA( cl, obj );
  403. {
  404.  /* UC Beg */
  405.  
  406.     RemAllVertices((data->Model));
  407.     MUI_Redraw((data->viewgr),MADF_DRAWOBJECT);
  408.  
  409. }
  410.  /* UC End */
  411. New_exit:
  412. return _ret;
  413. }
  414.  
  415. static __saveds __asm void IntuiMsgFunc(register __a1 struct IntuiMessage=
  416.  *imsg,register __a2 struct FileRequester *req)
  417. {
  418.     if (imsg->Class =3D=3D IDCMP_REFRESHWINDOW)
  419.         DoMethod(req->fr_UserData,MUIM_Application_CheckRefresh);
  420. }
  421.  
  422. static unsigned long mMainwinLoad( struct IClass *cl, Object *obj, Msg msg )
  423. {
  424.  unsigned long _ret = 1;
  425.  MainwinData *data = INST_DATA( cl, obj );
  426. {
  427.  /* UC Beg */
  428.  
  429.     static char buf[512];
  430.     static const struct Hook IntuiMsgHook =3D { { 0,0 },(void *)IntuiMsgFunc=
  431. ,NULL,NULL };
  432.     Object *app =3D (Object *)BCC_XGet( obj, MUIA_ApplicationObject );
  433.  
  434.     set(app,MUIA_Application_Sleep,TRUE);
  435.     if (MUI_AslRequestTags((data->objreq),
  436.         ASLFR_Window,        BCC_XGet( obj, MUIA_Window_Window ),
  437.         ASLFR_TitleText,    "Load an object",
  438.         ASLFR_DoSaveMode,    FALSE,
  439.         ASLFR_UserData,        app,
  440.         ASLFR_IntuiMsgFunc,    &IntuiMsgHook,
  441.         TAG_DONE,0))
  442.     {
  443.         if (*(data->objreq)->fr_File)
  444.         {
  445.             stccpy(buf,(data->objreq)->fr_Drawer,sizeof(buf));
  446.             AddPart(buf,(data->objreq)->fr_File,sizeof(buf));
  447.  
  448.             LoadModel(buf,(data->Model));
  449.             MUI_Redraw((data->viewgr),MADF_DRAWOBJECT);
  450.         }
  451.     }
  452.     set(app,MUIA_Application_Sleep,FALSE);
  453.  
  454. }
  455.  /* UC End */
  456. Load_exit:
  457. return _ret;
  458. }
  459.  
  460. static char *getfilename(Object *win,char *title,char *dir,char *pattern,=
  461. char save)
  462. {
  463.     static char buf[512];
  464.     struct FileRequester *req;
  465.     struct Window *w;
  466.     static long left=3D-1,top=3D-1,width=3D-1,height=3D-1;
  467.     Object *app =3D (Object *)BCC_XGet(win,MUIA_ApplicationObject);
  468.     char *res =3D NULL;
  469.     static const struct Hook IntuiMsgHook =3D { { 0,0 },(VOID *)IntuiMsgFunc=
  470. ,NULL,NULL };
  471.  
  472.     get(win,MUIA_Window_Window,&w);
  473.     if (left=3D=3D-1)
  474.     {
  475.         left   =3D w->LeftEdge+w->BorderLeft+2;
  476.         top    =3D w->TopEdge+w->BorderTop+2;
  477.         width  =3D w->Width-w->BorderLeft-w->BorderRight-4;
  478.         height =3D w->Height-w->BorderTop-w->BorderBottom-4;
  479.     }
  480.  
  481.     if (req=3DMUI_AllocAslRequestTags(ASL_FileRequest,
  482.         ASLFR_Window, w,
  483.         ASLFR_TitleText, title,
  484.         ASLFR_InitialLeftEdge, left,
  485.         ASLFR_InitialTopEdge , top,
  486.         ASLFR_InitialWidth   , width,
  487.         ASLFR_InitialHeight  , height,
  488.         ASLFR_InitialDrawer  , dir,
  489.         ASLFR_InitialPattern , pattern,
  490.         ASLFR_DoSaveMode     , save,
  491.         ASLFR_DoPatterns     , TRUE,
  492.         ASLFR_RejectIcons    , TRUE,
  493.         ASLFR_UserData       , app,
  494.         ASLFR_IntuiMsgFunc   , &IntuiMsgHook,
  495.         TAG_DONE))
  496.     {
  497.         set(app,MUIA_Application_Sleep,TRUE);
  498.         if (MUI_AslRequestTags(req,TAG_DONE))
  499.         {
  500.             if (*req->fr_File)
  501.             {
  502.                 res =3D buf;
  503.                 stccpy(buf,req->fr_Drawer,sizeof(buf));
  504.                 AddPart(buf,req->fr_File,sizeof(buf));
  505.             }
  506.             left   =3D req->fr_LeftEdge;
  507.             top    =3D req->fr_TopEdge;
  508.             width  =3D req->fr_Width;
  509.             height =3D req->fr_Height;
  510.         }
  511.         MUI_FreeAslRequest(req);
  512.         set(app,MUIA_Application_Sleep,FALSE);
  513.     }
  514.     return(res);
  515. }
  516.  
  517. static unsigned long mMainwinZoomIn( struct IClass *cl, Object *obj, Msg msg )
  518. {
  519.  unsigned long _ret = 1;
  520.  MainwinData *data = INST_DATA( cl, obj );
  521. {
  522.  /* UC Beg */
  523.  
  524.     BCC_Set( obj, MUIA_Mainwin_Zoom, 3D f2l((data->Zoom) * 1.25) );
  525.  
  526. }
  527.  /* UC End */
  528. ZoomIn_exit:
  529. return _ret;
  530. }
  531.  
  532. static unsigned long mMainwinZoomOut( struct IClass *cl, Object *obj, Msg msg )
  533. {
  534.  unsigned long _ret = 1;
  535.  MainwinData *data = INST_DATA( cl, obj );
  536. {
  537.  /* UC Beg */
  538.  
  539.     BCC_Set( obj, MUIA_Mainwin_Zoom, 3D f2l((data->Zoom) /=A01.25) );
  540.  
  541. }
  542.  /* UC End */
  543. ZoomOut_exit:
  544. return _ret;
  545. }
  546.  
  547. void aMainwinZoomSet( struct IClass *cl, Object *obj, struct { unsigned long ti_Tag;  long zoom ; } *tag )
  548. {
  549.  MainwinData *data = INST_DATA( cl, obj );
  550. {
  551.  /* UC Beg */
  552.  
  553.     char buf[64];
  554.  
  555.     (data->Zoom) =3D l2f((tag->zoom));
  556.  
  557.     (data->GridSize) =3D pow(10.0,floor(log10(0.1 / (data->Zoom))));
  558.     if (fract(log10(1.0 /=A0Zoom)) > 0.699) (data->GridSize) *=3D 5.0;
  559.     else if (fract(log10(1.0 /=A0Zoom)) > 0.301) (data->GridSize) *=3D 2.0;
  560.  
  561.     if ((data->GridSize) >=3D 1000000.0)
  562.         sprintf(buf,"Grid: %d Mm",(long)((data->GridSize) /=A01000000.0));
  563.     else if ((data->GridSize) >=3D 1000.0)
  564.         sprintf(buf,"Grid: %d km",(long)((data->GridSize) /=A01000.0));
  565.     else if ((data->GridSize) >=3D 1.0)
  566.         sprintf(buf,"Grid: %d m",(long)(data->GridSize));
  567.     else if ((data->GridSize) >=3D 0.01)
  568.         sprintf(buf,"Grid: %d cm",(long)((data->GridSize) * 100.0));
  569.     else
  570.         sprintf(buf,"Grid: %d mm",(long)((data->GridSize) * 1000.0));
  571.  
  572.     BCC_Set( (data->gridsizetxt), MUIA_Text_Contents, 3D buf );
  573.  
  574.     BCC_Set( (data->viewgr), MUIA_View_Zoom, 3D f2l((data->Zoom)) );
  575.     BCC_Set( (data->viewgr), MUIA_View_GridSize, 3D f2l((data->GridSize)) );
  576.     MUI_Redraw((data->viewgr),MADF_DRAWOBJECT);
  577.  
  578. }
  579.  /* UC End */
  580. }
  581.  
  582. /* MUI - Mainwin class dispatcher */
  583.  
  584.  
  585. static unsigned long mMainwinOM_SET( struct IClass *cl, Object *obj, struct opSet *msg )
  586. {
  587.  struct TagItem *tags, *tag;
  588.  for( tags = msg->ops_AttrList; tag = NextTagItem(&tags); ) {
  589.         switch( tag->ti_Tag ) {
  590.             case MUIA_Mainwin_Zoom: aMainwinZoomSet( cl, obj, (void*)tag ); break;
  591.         }
  592.     }
  593.      return DoSuperMethodA( cl, obj, (Msg)msg );
  594. }
  595.  
  596. static unsigned long SAVEDS ASM Mainwin_Dispatcher( REG(a0) struct IClass *cl, REG(a2) Object *obj, REG(a1) Msg msg )
  597. {
  598.     switch( msg->MethodID ) {
  599.         case MUIM_Mainwin_New: return mMainwinNew( cl, obj, (Msg)msg );
  600.         case MUIM_Mainwin_Load: return mMainwinLoad( cl, obj, (Msg)msg );
  601.         case MUIM_Mainwin_ZoomIn: return mMainwinZoomIn( cl, obj, (Msg)msg );
  602.         case MUIM_Mainwin_ZoomOut: return mMainwinZoomOut( cl, obj, (Msg)msg );
  603.         case OM_NEW: return mMainwinOM_NEW( cl, obj, (struct opSet*)msg );
  604.         case OM_DISPOSE: return mMainwinOM_DISPOSE( cl, obj, (Msg)msg );
  605.         case MUIM_HandleEvent: return mMainwinMUIM_HandleEvent( cl, obj, (struct MUIP_HandleEvent*)msg );
  606.         case OM_SET: return mMainwinOM_SET( cl, obj, (struct opSet*)msg );
  607.     }
  608.     return( DoSuperMethodA( cl, obj, msg ) );
  609. }
  610.  
  611. struct MUI_CustomClass *Mainwin_Create( void )
  612. {
  613.     return MUI_CreateCustomClass( NULL, MUIC_Window, NULL, sizeof( MainwinData ), Mainwin_Dispatcher );
  614. }
  615.